// 编译
const path = require("path");
const MinCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
  // 1. 指定生产模式（开发模式 和 生产模式）
  mode: "production",

  // 2. 指定入口文件
  entry: path.join(__dirname, "../src/index.js"),

  // 3. 指定出口（打包、编译输出目录）文件
  output: {
    filename: "index.js",
    path: path.resolve(__dirname, "../dist"),
    libraryTarget: "umd",
    library: "npm-module-case",
    // 只有生产环境这个配置才有用
    clean: true,
  },

  // 4. 加载器（属于webpack模块中的一员,模块有很多规则）
  module: {
    rules: [
      {
        // 使用babel转译es6语法和jsx
        test: /\.jsx?$/,
        loader: "babel-loader",
        exclude: /node_modules/,
      },
      {
        // 处理css样式文件
        test: /\.css$/,
        // loader只能指定一个，而use可以多个，且执行顺序是从下到上
        use: [MinCssExtractPlugin.loader, "css-loader"],
      },
      {
        // 处理scss样式文件
        test: /\.(sa|sc)ss$/,
        // loader只能指定一个，而use可以多个，且执行顺序是从下到上
        use: [MinCssExtractPlugin.loader, "css-loader", "sass-loader"],
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          "css-loader",
          {
            loader: "less-loader",
            options: {
              lessOptions: {
                paths: [
                  path.resolve(__dirname, "../src"),
                  path.resolve(__dirname, "../node_modules/antd"),
                ],
                javascriptEnabled: true,
                // 主题变量注入
                modifyVars: {
                  "primary-color": "#FD8200",
                },
              },
            },
          },
        ],
      },
      {
        test: /\.(png|jpg|gif|jpeg)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            // 图片小于40kb，就转换成base64，减少服务请求
            maxSize: 40 * 1024,
          },
        },
        generator: {
          filename: "static/images/[name][hash:8][ext]",
        },
      },
    ],
  },

  // 5. 插件（html插件、css打包分割插件、eslint代码检测插件等）
  plugins: [
    new MinCssExtractPlugin({
      // 将打包后的css文件放到dist/static/css目录下
      filename: "static/css/[name].css",
    }),
  ],

  // 6. 解析模块配置
  resolve: {
    extensions: [".js", ".jsx", ".ts", ".tsx"],
  },

  // 打包时不引入第三方引入的模块
  externals: { "xxx-xxxx": "xxx-xxxx" },
};
